A power tool (105, 205, 305, 405, 500, 1650) comprising: a housing; a sensor supported by the housing and configured to generate sensor data indicative of an operational parameter of the power tool; a machine learning controller (120, 220, 320, 420, 540) including a first processor and a first memory, the machine learning controller supported by the housing, coupled to the sensor, and including a machine learning control program, the machine learning controller configured to: receive the sensor data, process the sensor data, using the machine learning control program, wherein the machine learning control program is a trained machine learning control program, and generate, using the machine learning control program, a first output based on the sensor data, wherein the first output includes an indication of a detected application of the power tool, the application corresponding to at least one selected from the group of a type of fastener, a type of implement driven by the power tool, and a type of material on which the power tool is working, wherein the first memory includes a database storing a plurality of operating mode profiles, and wherein each operating mode profile includes various parameters and thresholds used to control the power tool which are optimized for different applications; a motor supported by the housing; and an electronic controller including a second processor and a second memory, the electronic controller supported by the housing, coupled to the motor and to the machine learning controller, the electronic controller configured to: receive the first output from the machine learning controller, and control the motor based on the operating mode profile associated with the detected application. a housing; a sensor supported by the housing and configured to generate sensor data indicative of an operational parameter of the power tool; a machine learning controller (120, 220, 320, 420, 540) including a first processor and a first memory, the machine learning controller supported by the housing, coupled to the sensor, and including a machine learning control program, the machine learning controller configured to: receive the sensor data, process the sensor data, using the machine learning control program, wherein the machine learning control program is a trained machine learning control program, and generate, using the machine learning control program, a first output based on the sensor data, wherein the first output includes an indication of a detected application of the power tool, the application corresponding to at least one selected from the group of a type of fastener, a type of implement driven by the power tool, and a type of material on which the power tool is working, wherein the first memory includes a database storing a plurality of operating mode profiles, and wherein each operating mode profile includes various parameters and thresholds used to control the power tool which are optimized for different applications; receive the sensor data, process the sensor data, using the machine learning control program, wherein the machine learning control program is a trained machine learning control program, and generate, using the machine learning control program, a first output based on the sensor data, wherein the first output includes an indication of a detected application of the power tool, the application corresponding to at least one selected from the group of a type of fastener, a type of implement driven by the power tool, and a type of material on which the power tool is working, wherein the first memory includes a database storing a plurality of operating mode profiles, and wherein each operating mode profile includes various parameters and thresholds used to control the power tool which are optimized for different applications; a motor supported by the housing; and an electronic controller including a second processor and a second memory, the electronic controller supported by the housing, coupled to the motor and to the machine learning controller, the electronic controller configured to: receive the first output from the machine learning controller, and control the motor based on the operating mode profile associated with the detected application. receive the first output from the machine learning controller, and control the motor based on the operating mode profile associated with the detected application.